/**

 @Name：layuiAdmin 公共业务
 @Author：贤心
 @Site：http://www.layui.com/admin/
 @License：LPPL

 */

layui.define(['table'], function (exports) {
    var $ = layui.$
        , layer = layui.layer
        , laytpl = layui.laytpl
        , setter = layui.setter
        , view = layui.view
        , admin = layui.admin
        , table = layui.table
        , form = layui.form

    //公共业务的逻辑处理可以写在此处，切换任何页面都会执行
    //设置表格公共信息
    table.set({
        headers: { //通过 request 头传递
            token: layui.data(layui.setter.tableName).token
        }
        , where: { //通过参数传递
            token: layui.data(layui.setter.tableName).token
        }
        , method: 'post'
        , defaultToolbar: ['filter']//默认操作按钮
        , limit: 10//默认分页大小
        , limits: [10, 30, 50]
        , text: '对不起，加载出现异常！'
    });

    //退出
    admin.events.logout = function () {
        //执行退出接口
        admin.req({
            url: layui.setter.apiHost + '/loginout'
            , data: {}
            , done: function (res) {
                //清空本地记录的 token，并跳转到登入页
                admin.exit();
            }
        });
    };

    //自定义公共函数
    var obj = {
        /**
         * 公共请求
         * @param url 请求地址
         * @param table_id 当前页id
         * @param data 请求数据
         * @param reload 是否刷新
         * @returns {boolean}
         */
        ajax: function (url, table_id = '', data = {}, reload = true) {
            if (!data) data = {};
            //不存在id时重新获取
            if (!data.id) {
                var data_id = new Array();
                var checkStatus = table.checkStatus(table_id),
                    select_data = checkStatus.data;

                for (var i = 0; i < select_data.length; i++) {
                    data_id.push(select_data[i].id);
                }
                if (data_id.length > 0) {
                    data.id = data_id;
                } else {
                    layer.msg('没有选择任何数据');
                    return false;
                }
            }
            var return_data = false;//返回数据
            admin.req({
                url: url,
                data: data,
                async: false,
                success: function (result) {
                    if (result.code == 0) {
                        if (reload) {
                            layer.msg('操作成功', {time: 1000}, function () {
                                table.reload(table_id);
                            })
                        }
                        return_data = true;
                    } else if (result.code == 1) {
                        layer.alert(result.msg);//持续提示不关闭提示信息
                    } else if (result.msg) {
                        layer.msg(result.msg);
                    } else {
                        layer.msg('操作失败');
                    }
                }
            })
            if (return_data) {
                return return_data;
            }
        },
        /**
         * 打开一个窗口
         * title 窗口名称
         * api_action_url api地址前段
         * view_url 模板文件地址
         * lay_id_name 页面id
         * edit_data 弹框设置和地址
         * default_data 默认数据
         * */
        open_window: function (title, api_action_url, view_url, lay_id_name, set_data = {}, default_data = {}) {
            if (set_data.width == '100%') set_data.height = '100%';
            if (!set_data.width) set_data.width = '600px';
            if (!set_data.height) set_data.height = '550px';
            if (!set_data.detail_url) set_data.detail_url = api_action_url + '/detail';
            if (!set_data.save_url) set_data.save_url = api_action_url + '/save';

            admin.popup({
                title: title,
                area: [set_data.width, set_data.height],
                id: lay_id_name + new Date().getTime(),
                success: function (layero, index) {
                    var detail_data = default_data;
                    //存在详情地址和id时获取详情内容
                    if (set_data.id && set_data.detail_url) {
                        admin.req({
                            url: set_data.detail_url,
                            data: {id: set_data.id},
                            async: false,
                            success: function (result) {
                                if (result.code == 0) {
                                    detail_data = $.extend(default_data, result.data);
                                }
                            }
                        });
                    }
                    view(this.id).render(view_url, detail_data).done(function () {
                        form.render(null, lay_id_name + '-form');
                        if (detail_data) form.val(lay_id_name + '-form', detail_data);//初始化表单
                        //监听提交
                        form.on('submit(' + lay_id_name + '-form-submit)', function (data) {
                            admin.req({
                                type: "POST",
                                url: set_data.save_url,
                                data: data.field,
                                success: function (result) {
                                    if (result.code == 0) {
                                        layer.msg('操作成功', {time: 1000}, function () {
                                            //在弹出多个页面后如果只需要刷新对应的表格，需要table_id参数，否则会造成刷新了所有的弹出页面
                                            if (set_data.table_id) {
                                                table.reload(set_data.table_id);
                                            } else {
                                                layui.index.render();
                                            }
                                            layer.close(index);//执行关闭
                                        });
                                    } else if (result.code == 1) {
                                        layer.alert(result.msg);//持续提示不关闭提示信息
                                    } else {
                                        layer.msg(result.msg);
                                    }
                                },
                                error: function () {
                                    layer.msg('操作失败，请刷新页面重试！');
                                }
                            });
                            return false;
                        });
                    });
                }
            });
        },
        /**
         * 创建编辑器
         * editor_id 编辑器名称
         * */
        editor_create: function (editor_id = 'content') {
            var aliyun_token;
            admin.req({
                url: layui.setter.apiHost + '/helper/aliyun_token',
                data: {model: 'editor'},
                success: function (result) {
                    if (result.code == 0) {
                        aliyun_token = result.data;
                        var editor_arr = [];
                        var E = window.wangEditor;
                        var editor_name = 'editor' + editor_id;
                        editor_arr[editor_name] = new E('#editor_' + editor_id)
                        editor_arr[editor_name].customConfig.onchange = function (html) {
                            //监控变化，同步更新到 textarea
                            $('[name="' + editor_id + '"]').val(html)
                        }
                        editor_arr[editor_name].customConfig.uploadImgServer = aliyun_token.host;
                        editor_arr[editor_name].customConfig.uploadFileName = 'file';
                        editor_arr[editor_name].customConfig.uploadImgParams = {
                            'domain': aliyun_token.domain,
                            'key': aliyun_token.dir,
                            'policy': aliyun_token.policy,
                            'OSSAccessKeyId': aliyun_token.accessid,
                            'success_action_status' : '200', //让服务端返回200,不然，默认会返回204
                            'signature': aliyun_token.signature,
                        };
                        editor_arr[editor_name].create();
                    }
                }
            });
        },
        /**
         * 图片缩放
         * url 图片地址
         * w 宽度
         * h 高度
         * m 缩放模式
         * */
        image_resize: function(url, w, h, m = 'lfit'){
            var new_url = '';
            //非网络地址和已经加了处理的图片不再处理
            if (url.indexOf("http") == -1 || url.indexOf("oss-process") != -1) {
                return url;
            } else {
                var params = Array();
                if (w) {
                    params.push('w_' + w);
                }
                if (h) {
                    params.push('h_' + h);
                }
                if (m) {
                    params.push('m_' + m);
                }
                new_url = url + '?x-oss-process=image/resize,' + params.join(',');
                return new_url;
            }
            return url;
        },
        /**
         * 省市区选择
         * type 下拉框id
         * parent_id 上级id
         * default_id 默认值
         * */
        get_area: function (type, parent_id, default_id) {
            if (!default_id) default_id = 0;
            if (!parent_id) parent_id = 0;
            if (!type) type = 'prov_id';

            admin.req({
                type : "GET",
                url : layui.setter.apiHost + '/helper/area',
                data : {parent_id:parent_id},
                async: false,
                success : function(result) {
                    if (result.code==0) {
                        var html = '<option value="0"></option>';
                        $.each(result.data, function (index, item) {
                            var selected = '';
                            if (item.id == default_id) {
                                selected = 'selected';
                            }
                            html += '<option value="' + item.id + '" ' + selected + '>' + item.name + '</option>';
                        })
                        $('#' + type).html(html);
                        //选择省份时清空地区
                        if (type == 'city_id') {
                            $('#area_id').html('<option value=""></option>');
                        }
                        form.render('select');
                    }
                },
                error : function () {
                    layer.msg('操作失败，请刷新页面重试！');
                }
            });
        },
        /**
         * 设置默认省市区
         * prov_id 省份
         * city_id 城市
         * area_id 地区
         * */
        set_default_area: function (prov_id, city_id, area_id) {
            this.get_area('prov_id', 0, prov_id);
            if (prov_id && prov_id) {
                this.get_area('city_id', prov_id, city_id);
                if (city_id && area_id) {
                    this.get_area('area_id', city_id, area_id);
                }
            }
        }
    }


    //对外暴露的接口
    exports('common', obj);
});